package com.leyou.auth.task;

import com.leyou.auth.service.AuthService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class IntervalTokenHolder {

    @Autowired
    private AuthService authService;


    final long refreshTime = 86400000L;

    private String token;

    /**
     * 限定周期
     * fixedDelay，从上一次任务结束后计时，休息多久，然后开启下一次执行
     * fixedRate，从上一次开始开始及时，多久后开启下一次，一般不会有问题，下一次要开始，上一次还没解释，任务累加，等到有机会执行，则一次性执行所有的累加任务
     *
     * 上面两个属性都要常量值，并且不能是封装类型,单位是毫秒
     * 公交车司机，
     *
     * cron 表达式限定周期
     *
     */
    @Scheduled(fixedDelay = refreshTime) //24H刷新一次，第一次请求在spring加载这个业务时请求
    public void loadToken() throws InterruptedException {

        while (true){
            try {
                //把获取的token保存到当前类的属性中
                this.token = authService.authenticate(10L, "auth-service");
                log.info("【授权中心】获取token成功");
                break;
            } catch (Exception e) {
                log.error("【授权中心】获取token失败");
                Thread.sleep(10000); //失败后0.5s后再次请求
            }
        }
    }

    public String getToken() {
        return token;
    }
}
